package com.jdriven.stateless.security;
import javax.servlet.Filter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.filter.CharacterEncodingFilter;
@EnableAutoConfiguration
@Configuration
@ComponentScan
public class StatelessAuthentication {
public static void main(String[] args) {
SpringApplication.run(StatelessAuthentication.class, args);
}
@Bean
public InitializingBean insertDefaultUsers() {
return new InitializingBean() {
@Autowired
private UserRepository userRepository;
@Override
public void afterPropertiesSet() {
addUser("admin", "admin");
addUser("user", "user");
}
private void addUser(String username, String password) {
User user = new User();
user.setUsername(username);
user.setPassword(new BCryptPasswordEncoder().encode(password));
user.grantRole(username.equals("admin") ? UserRole.ADMIN : UserRole.USER);
userRepository.save(user);
}
};
}
@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return characterEncodingFilter;
}
}